The thread gate pattern is an effective tool for managing thread concurrency, but not many developers know about it. Introduces the concept of thread gates, and then shows how to implement them in a multithreaded prime-number generator.
Discusses the things you need to know to program threads in the real world. This article assumes you understand the language-level support for threads and focuses on the legion of problems that arise when you try to use these language features.
Discussion of two more architectural solutions to threading problems: a synchronous dispatcher (or 'reactor') and an asynchronous dispatcher (or 'active object').